home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / util / snap_1_4 / part01 / source / patch.c < prev    next >
Text File  |  1990-02-11  |  2KB  |  55 lines

  1. /* This patch is a quite ugly way to solve the problem
  2. ** that occurs when Intuition tries to draw something
  3. ** in a screen which has it's layers locked.
  4. ** The problem is solved by disabling dangerous functions.
  5. ** Some functions remain because they require more work.
  6. ** An example of this is OpenWindow(), since OpenWindow()
  7. ** can't be as easily ignored as the functions that ARE
  8. ** patched here. OpenWindow() would require some sort of
  9. ** semaphore locking and waiting - and so we're back where
  10. ** we started.
  11. */
  12.  
  13. typedef VOID (*FPTR)();
  14.  
  15. IMPORT struct IntuitionBase *IntuitionBase;
  16. #define LVOWindowToBack   -0x0132L
  17. #define LVOWindowToFront  -0x0138L
  18. #define LVOActivateWindow -0x01c2L
  19.  
  20. VOID myActivateWindow(), myWindowToFront(), myWindowToBack();
  21.  
  22. LONG oldActivateWindow, oldWindowToFront, oldWindowToBack;
  23.  
  24. STATIC WORD patched = 0;
  25.  
  26. VOID SafePatch()
  27. {
  28.     if (!patched) {
  29.         Forbid();     /* I don't expect interrupts to do much intuition */
  30.         oldActivateWindow = (LONG)SetFunction((struct Library *)IntuitionBase,
  31.           LVOActivateWindow, (FPTR)myActivateWindow);
  32.         oldWindowToFront = (LONG)SetFunction((struct Library *)IntuitionBase,
  33.           LVOWindowToFront, (FPTR)myWindowToFront);
  34.         oldWindowToBack =  (LONG)SetFunction((struct Library *)IntuitionBase,
  35.           LVOWindowToBack, (FPTR)myWindowToBack);
  36.         Permit();
  37.         patched = 1;
  38.     }
  39. }
  40.  
  41. VOID SafeRestore()
  42. {
  43.     if (patched) {
  44.         Forbid();
  45.         (VOID)SetFunction((struct Library *)IntuitionBase,
  46.           LVOActivateWindow, (FPTR)oldActivateWindow);
  47.         (VOID)SetFunction((struct Library *)IntuitionBase,
  48.           LVOWindowToFront, (FPTR)oldWindowToFront);
  49.         (VOID)SetFunction((struct Library *)IntuitionBase,
  50.           LVOWindowToBack, (FPTR)oldWindowToBack);
  51.         Permit();
  52.         patched = 0;
  53.     }
  54. }
  55.